package com.ruoyi.dmpcomponent.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.dmpcomponent.domain.DmpComponentConfigParams;
import com.ruoyi.dmpcomponent.mapper.DmpComponentConfigMapper;
import com.ruoyi.dmpcomponent.domain.DmpComponentConfig;
import com.ruoyi.dmpcomponent.service.IDmpComponentConfigService;

/**
 * 通用组件配置Service业务层处理
 * 
 * @author MquanZeng
 * @date 2021-12-22
 */
@Service
public class DmpComponentConfigServiceImpl implements IDmpComponentConfigService 
{
    @Autowired
    private DmpComponentConfigMapper dmpComponentConfigMapper;

    /**
     * 查询通用组件配置
     * 
     * @param compId 通用组件配置主键
     * @return 通用组件配置
     */
    @Override
    public DmpComponentConfig selectDmpComponentConfigByCompId(Long compId)
    {
        return dmpComponentConfigMapper.selectDmpComponentConfigByCompId(compId);
    }

    /**
     * 查询通用组件配置列表
     * 
     * @param dmpComponentConfig 通用组件配置
     * @return 通用组件配置
     */
    @Override
    public List<DmpComponentConfig> selectDmpComponentConfigList(DmpComponentConfig dmpComponentConfig)
    {
        return dmpComponentConfigMapper.selectDmpComponentConfigList(dmpComponentConfig);
    }

    /**
     * 新增通用组件配置
     * 
     * @param dmpComponentConfig 通用组件配置
     * @return 结果
     */
    @Transactional
    @Override
    public int insertDmpComponentConfig(DmpComponentConfig dmpComponentConfig)
    {
        dmpComponentConfig.setCreateTime(DateUtils.getNowDate());
        int rows = dmpComponentConfigMapper.insertDmpComponentConfig(dmpComponentConfig);
        insertDmpComponentConfigParams(dmpComponentConfig);
        return rows;
    }

    /**
     * 修改通用组件配置
     * 
     * @param dmpComponentConfig 通用组件配置
     * @return 结果
     */
    @Transactional
    @Override
    public int updateDmpComponentConfig(DmpComponentConfig dmpComponentConfig)
    {
        dmpComponentConfig.setUpdateTime(DateUtils.getNowDate());
        dmpComponentConfigMapper.deleteDmpComponentConfigParamsByCompId(dmpComponentConfig.getCompId());
        insertDmpComponentConfigParams(dmpComponentConfig);
        return dmpComponentConfigMapper.updateDmpComponentConfig(dmpComponentConfig);
    }

    /**
     * 批量删除通用组件配置
     * 
     * @param compIds 需要删除的通用组件配置主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteDmpComponentConfigByCompIds(Long[] compIds)
    {
        dmpComponentConfigMapper.deleteDmpComponentConfigParamsByCompIds(compIds);
        return dmpComponentConfigMapper.deleteDmpComponentConfigByCompIds(compIds);
    }

    /**
     * 删除通用组件配置信息
     * 
     * @param compId 通用组件配置主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteDmpComponentConfigByCompId(Long compId)
    {
        dmpComponentConfigMapper.deleteDmpComponentConfigParamsByCompId(compId);
        return dmpComponentConfigMapper.deleteDmpComponentConfigByCompId(compId);
    }

    /**
     * 获取数据采集引擎下拉项
     *
     * @return 结果
     */
    @Override
    public List<DmpComponentConfig> getDCCompOptions() {
        List<DmpComponentConfig> dataCollectComps = new ArrayList<>();

        List<DmpComponentConfig> allComps = dmpComponentConfigMapper.selectAllCompOptions();
        for(DmpComponentConfig comp : allComps){
            String[] items = comp.getCompUseto().split(",");
            for(String ut : items){
                // 只过滤出用于数据采集的组件
                if(ut != null && "datacollect".equals(ut)){
                    dataCollectComps.add(comp);
                }
            }
        }

        return dataCollectComps;
    }

    /**
     * 新增通用组件配置键值对参数信息
     * 
     * @param dmpComponentConfig 通用组件配置对象
     */
    public void insertDmpComponentConfigParams(DmpComponentConfig dmpComponentConfig)
    {
        List<DmpComponentConfigParams> dmpComponentConfigParamsList = dmpComponentConfig.getDmpComponentConfigParamsList();
        Long compId = dmpComponentConfig.getCompId();
        if (StringUtils.isNotNull(dmpComponentConfigParamsList))
        {
            List<DmpComponentConfigParams> list = new ArrayList<DmpComponentConfigParams>();
            for (DmpComponentConfigParams dmpComponentConfigParams : dmpComponentConfigParamsList)
            {
                dmpComponentConfigParams.setCompId(compId);
                list.add(dmpComponentConfigParams);
            }
            if (list.size() > 0)
            {
                dmpComponentConfigMapper.batchDmpComponentConfigParams(list);
            }
        }
    }
}
